Problem: The Little Elephant is playing with the Cartesian coordinates' system. Most of all he likes playing with integer points. The Little Elephant defines an integer point as a pair of integers (x; y), such that 0 ≤ x ≤ w and 0 ≤ y ≤ h. Thus, the Little Elephant knows only (w + 1)·(h + 1) distinct integer points.

The Little Elephant wants to paint a triangle with vertexes at integer points, the triangle's area must be a positive integer. For that, he needs to find the number of groups of three points that form such triangle. At that, the order of points in a group matters, that is, the group of three points (0;0), (0;2), (2;2) isn't equal to the group (0;2), (0;0), (2;2).

Help the Little Elephant to find the number of groups of three integer points that form a nondegenerate triangle with integer area.

Input

A single line contains two integers w and h (1 ≤ w, h ≤ 4000).

Output

In a single output line print an integer — the remainder of dividing the answer to the problem by 1000000007 (109 + 7).

Examples

Input

2 1


Output

36


Input

2 2


Output

240

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
long long w, h;
long long wyn;
int gcd(int a, int b) {
  while (b) {
    int pom = b;
    b = a % b;
    a = pom;
  }
  return a;
}
int main() {
  scanf("%d%d", &w, &h);
  w++;
  h++;
  wyn = w * h;
  wyn = wyn * (wyn - 1) % 1000000007 * (wyn - 2) % 1000000007;
  long long a = ((w + 1) / 2) * ((h + 1) / 2);
  long long b = (w / 2) * ((h + 1) / 2);
  long long c = ((w + 1) / 2) * (h / 2);
  long long d = (w / 2) * (h / 2);
  wyn -= 6 * a * b % 1000000007 * c % 1000000007;
  wyn -= 6 * a * b % 1000000007 * d % 1000000007;
  wyn -= 6 * a * d % 1000000007 * c % 1000000007;
  wyn -= 6 * d * b % 1000000007 * c % 1000000007;
  wyn -= w * h * (h - 1) % 1000000007 * (h - 2) % 1000000007;
  wyn -= w * h * (w - 1) % 1000000007 * (w - 2) % 1000000007;
  wyn %= 1000000007;
  for (int i = 1; i < w; i++) {
    for (int j = 1; j < h; j++) {
      wyn -= (gcd(i, j) - 1) * (w - i) * (h - j) * 12;
      wyn %= 1000000007;
    }
  }
  printf("%d\n", int((wyn + 1000000007) % 1000000007));
}