#include <bits/stdc++.h>
using namespace std;
void writee(long long x) {
  if (x > 9) writee(x / 10);
  putchar(x % 10 + '0');
}
void write(long long x) {
  if (x < 0) putchar('-'), x = -x;
  writee(x);
}
long long read() {
  char x;
  bool emm = false;
  int a = 0;
  x = getchar();
  while (!isdigit(x)) {
    if (x == '-') emm = true;
    x = getchar();
  }
  while (isdigit(x)) {
    a = a * 10 + x - '0';
    x = getchar();
  }
  if (emm) a = 0 - a;
  return a;
}
int G[2001 + 5][2001 + 5], ans, miu[2001 + 5], prime[2001 + 5], tot,
    flag[2001 + 5];
void shai() {
  for (int i = 2; i <= 2001; ++i) {
    if (!flag[i]) prime[++tot] = i, miu[i] = -1;
    for (int j = 1; i * prime[j] <= 2001; ++j) {
      flag[i * prime[j]] = 1;
      if (!(i % prime[j])) {
        miu[i * prime[j]] = 0;
        break;
      }
      miu[i * prime[j]] = -miu[i];
    }
  }
  miu[1] = 1, flag[1] = 1;
}
int gcd(int x, int y) { return y ? gcd(y, x % y) : x; }
int f(int x, int y) {
  ans = 0;
  for (int i = 1; i <= x; ++i)
    if (G[i][y] == 1) ans += x / i;
  return ans;
}
int main() {
  shai();
  int a = read(), b = read(), c = read();
  for (int i = 1; i <= 2001; ++i)
    for (int j = 1; j <= 2001; ++j) G[i][j] = gcd(i, j);
  long long anss = 0;
  for (int z = 1; z <= c; ++z) {
    for (int d = 1; d <= a; ++d) {
      if (G[d][z] == 1) {
        anss += 1ll * (c / z) * miu[d] * f(a / d, z) * f(b / d, z);
      }
    }
  }
  anss = (anss + 1073741824) % 1073741824;
  write(anss);
  return 0;
}

### Prompt

Develop a solution in cpp to the problem described below:

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.

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
void writee(long long x) {
  if (x > 9) writee(x / 10);
  putchar(x % 10 + '0');
}
void write(long long x) {
  if (x < 0) putchar('-'), x = -x;
  writee(x);
}
long long read() {
  char x;
  bool emm = false;
  int a = 0;
  x = getchar();
  while (!isdigit(x)) {
    if (x == '-') emm = true;
    x = getchar();
  }
  while (isdigit(x)) {
    a = a * 10 + x - '0';
    x = getchar();
  }
  if (emm) a = 0 - a;
  return a;
}
int G[2001 + 5][2001 + 5], ans, miu[2001 + 5], prime[2001 + 5], tot,
    flag[2001 + 5];
void shai() {
  for (int i = 2; i <= 2001; ++i) {
    if (!flag[i]) prime[++tot] = i, miu[i] = -1;
    for (int j = 1; i * prime[j] <= 2001; ++j) {
      flag[i * prime[j]] = 1;
      if (!(i % prime[j])) {
        miu[i * prime[j]] = 0;
        break;
      }
      miu[i * prime[j]] = -miu[i];
    }
  }
  miu[1] = 1, flag[1] = 1;
}
int gcd(int x, int y) { return y ? gcd(y, x % y) : x; }
int f(int x, int y) {
  ans = 0;
  for (int i = 1; i <= x; ++i)
    if (G[i][y] == 1) ans += x / i;
  return ans;
}
int main() {
  shai();
  int a = read(), b = read(), c = read();
  for (int i = 1; i <= 2001; ++i)
    for (int j = 1; j <= 2001; ++j) G[i][j] = gcd(i, j);
  long long anss = 0;
  for (int z = 1; z <= c; ++z) {
    for (int d = 1; d <= a; ++d) {
      if (G[d][z] == 1) {
        anss += 1ll * (c / z) * miu[d] * f(a / d, z) * f(b / d, z);
      }
    }
  }
  anss = (anss + 1073741824) % 1073741824;
  write(anss);
  return 0;
}

```