Dreamoon loves summing up something for no reason. One day he obtains two integers a and b occasionally. He wants to calculate the sum of all nice integers. Positive integer x is called nice if <image> and <image>, where k is some integer number in range [1, a].

By <image> we denote the quotient of integer division of x and y. By <image> we denote the remainder of integer division of x and y. You can read more about these operations here: http://goo.gl/AcsXhT.

The answer may be large, so please print its remainder modulo 1 000 000 007 (109 + 7). Can you compute it faster than Dreamoon?

Input

The single line of the input contains two integers a, b (1 ≤ a, b ≤ 107).

Output

Print a single integer representing the answer modulo 1 000 000 007 (109 + 7).

Examples

Input

1 1


Output

0


Input

2 2


Output

8

Note

For the first sample, there are no nice integers because <image> is always zero.

For the second sample, the set of nice integers is {3, 5}.
import sun.nio.cs.ext.MacThai;

import java.io.*;
import java.util.*;

public class Main {

    static class FastReader {
        BufferedReader br;
        StringTokenizer st;
        PrintWriter out;

        public FastReader(boolean fileIO) throws IOException{

            Reader reader = fileIO ? new FileReader("input.txt"):  new InputStreamReader(System.in);
            Writer writer = fileIO ? new FileWriter("output.txt") : new OutputStreamWriter(System.out);
            br = new BufferedReader(reader);
            out = new PrintWriter(new BufferedWriter(writer));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }





    public static void main(String args[]) throws IOException {

        FastReader read = new FastReader(false);
        long a = read.nextLong();
        long b = read.nextLong();
        long sum = 0;
        long sumOfMods = (b* (b-1) )/2;
        for(int k=1;k<=a;k++){
            sum += ( (sumOfMods % 1000000007) * ( (k*b + 1) % 1000000007) ) % 1000000007;
        }
        System.out.println(sum % 1000000007);
    }
}
