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}.
#include <bits/stdc++.h>
using namespace std;
unsigned long long const Mod = 1000000007;
unsigned long long sq_sum(unsigned long long n) {
  unsigned long long ret = n;
  ret = (n * (n + 1));
  ret /= 2;
  if (ret % 3 == 0) {
    return ((ret / 3) % Mod * (2 * n + 1)) % Mod;
  } else {
    return ((ret % Mod) * ((2 * n + 1) / 3)) % Mod;
  }
}
unsigned long long check(unsigned long long a, unsigned long long b) {
  unsigned long long ret = 0;
  for (unsigned long long x = b; x < 100000; ++x) {
    if (x % b != 0) {
      unsigned long long t1 = x / b;
      unsigned long long t2 = x % b;
      if (t1 % t2 == 0 && t1 / t2 <= a) ret += x;
    }
  }
  return ret;
}
int main() {
  unsigned long long a, b;
  while (cin >> a >> b) {
    cout << (((a * (a + 1) / 2) % Mod * b + a) % Mod *
             ((b * (b - 1) / 2) % Mod)) %
                Mod
         << endl;
  }
}
