Problem: Let's denote d(n) as the number of divisors of a positive integer n. You are given three integers a, b and c. Your task is to calculate the following sum:

<image>

Find the sum modulo 1073741824 (230).

Input

The first line contains three space-separated integers a, b and c (1 ≤ a, b, c ≤ 2000).

Output

Print a single integer — the required sum modulo 1073741824 (230).

Examples

Input

2 2 2


Output

20


Input

4 4 4


Output

328


Input

10 10 10


Output

11536

Note

For the first example.

  * d(1·1·1) = d(1) = 1; 
  * d(1·1·2) = d(2) = 2; 
  * d(1·2·1) = d(2) = 2; 
  * d(1·2·2) = d(4) = 3; 
  * d(2·1·1) = d(2) = 2; 
  * d(2·1·2) = d(4) = 3; 
  * d(2·2·1) = d(4) = 3; 
  * d(2·2·2) = d(8) = 4. 



So the result is 1 + 2 + 2 + 3 + 2 + 3 + 3 + 4 = 20.

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
int last[1000100], next[1000100];
long long val[1000100];
int cnt[1000100];
int c[3010];
int prime[3010], top, pp, tmp;
inline void add(long long s, int &ss) {
  val[++top] = s;
  cnt[top] = ss;
  s %= 1000007;
  next[top] = last[s];
  last[s] = top;
}
inline int find(long long &x) {
  for (int i = last[x % 1000007]; i; i = next[i])
    if (x == val[i]) return cnt[i];
  return -1;
}
int f(int x, int y, int z, int p) {
  if (p == 0) return 1;
  if (x > y) {
    tmp = x;
    x = y;
    y = tmp;
  }
  if (x > z) {
    tmp = x;
    x = z;
    z = tmp;
  }
  if (y > z) {
    tmp = y;
    y = z;
    z = tmp;
  }
  long long s = ((((long long)((x << 11) | y) << 11) | z) << 9) | p;
  if (~find(s)) return find(s);
  int a, b, c, aa, bb, cc, ret = 0;
  for (a = 0, aa = 1; aa <= x; ++a, aa *= prime[p])
    for (b = 0, bb = 1; bb <= y; ++b, bb *= prime[p])
      for (c = 0, cc = 1; cc <= z; ++c, cc *= prime[p])
        ret = ((long long)(a + b + c + 1) * f(x / aa, y / bb, z / cc, p - 1) +
               ret) &
              1073741823;
  add(s, ret);
  return ret;
}
int main() {
  int i, j, x, y, z;
  for (i = 2; i <= 2000; ++i)
    if (c[i] == 0) {
      prime[++top] = i;
      for (j = i * i; j <= 2000; j += i) c[j] = 1;
    }
  pp = top;
  top = 0;
  scanf("%d%d%d", &x, &y, &z);
  while (pp && prime[pp] > x && prime[pp] > y && prime[pp] > z) --pp;
  printf("%d\n", f(x, y, z, pp));
  return 0;
}