#include <bits/stdc++.h>
using namespace std;
const int N = 2002;
int f[N], g[N * N];
bool ip[N];
int mu[N], p[N], nt[N];
void init_mu() {
  mu[1] = 1;
  ip[2] = true;
  p[0] = 2;
  for (int i = 1; i < N; i += 2) ip[i] = true;
  for (int i = 3, cnt = 1; i < N; i += 2) {
    if (ip[i]) {
      p[cnt++] = i;
      mu[i] = -1;
    }
    for (int j = 1, t; j < cnt && (t = i * p[j]) < N; ++j) {
      ip[t] = false;
      if (i % p[j] == 0) break;
      mu[t] = -mu[i];
    }
  }
  for (int i = 2; i < N; i += 4) mu[i] = -mu[i >> 1];
}
int getsum(int n) {
  int sum = 0;
  for (int i = 1, j; i <= n; i = j + 1) {
    j = n / (n / i);
    sum += (j - i + 1) * (n / i);
  }
  return sum;
}
void init() {
  for (int i = 0; i < N; ++i) f[i] = getsum(i);
  init_mu();
  int last = 1;
  for (int i = 2; i < N; ++i) {
    if (mu[i] == 0) continue;
    nt[last] = i;
    last = i;
  }
  nt[last] = N;
}
void getg(int a, int b, int c) {
  int n = a * b;
  for (int i = 0; i <= n; ++i) g[i] = 0;
  for (int i = 1; i <= n && i <= c; i = nt[i]) {
    for (int j = i, t = mu[i] * f[c / i]; j <= n; j += i) g[j] += t;
  }
}
long long getf(int a, int b, int d) {
  long long res = 0;
  for (int i = 1; i <= a; ++i) {
    for (int j = 1; j <= b; ++j) {
      res += (a / i) * (b / j) * g[i * j * d];
    }
  }
  return res;
}
int main() {
  init();
  int a, b, c;
  while (~scanf("%d%d%d", &a, &b, &c)) {
    getg(a, b, c);
    int ab = min(a, b);
    long long res = 0;
    for (int i = 1; i <= ab; i = nt[i]) {
      res += mu[i] * getf(a / i, b / i, i * i);
    }
    printf("%d\n", int(res % (1 << 30)));
  }
  return 0;
}

### Prompt

In Cpp, your task is to solve the following 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.

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
const int N = 2002;
int f[N], g[N * N];
bool ip[N];
int mu[N], p[N], nt[N];
void init_mu() {
  mu[1] = 1;
  ip[2] = true;
  p[0] = 2;
  for (int i = 1; i < N; i += 2) ip[i] = true;
  for (int i = 3, cnt = 1; i < N; i += 2) {
    if (ip[i]) {
      p[cnt++] = i;
      mu[i] = -1;
    }
    for (int j = 1, t; j < cnt && (t = i * p[j]) < N; ++j) {
      ip[t] = false;
      if (i % p[j] == 0) break;
      mu[t] = -mu[i];
    }
  }
  for (int i = 2; i < N; i += 4) mu[i] = -mu[i >> 1];
}
int getsum(int n) {
  int sum = 0;
  for (int i = 1, j; i <= n; i = j + 1) {
    j = n / (n / i);
    sum += (j - i + 1) * (n / i);
  }
  return sum;
}
void init() {
  for (int i = 0; i < N; ++i) f[i] = getsum(i);
  init_mu();
  int last = 1;
  for (int i = 2; i < N; ++i) {
    if (mu[i] == 0) continue;
    nt[last] = i;
    last = i;
  }
  nt[last] = N;
}
void getg(int a, int b, int c) {
  int n = a * b;
  for (int i = 0; i <= n; ++i) g[i] = 0;
  for (int i = 1; i <= n && i <= c; i = nt[i]) {
    for (int j = i, t = mu[i] * f[c / i]; j <= n; j += i) g[j] += t;
  }
}
long long getf(int a, int b, int d) {
  long long res = 0;
  for (int i = 1; i <= a; ++i) {
    for (int j = 1; j <= b; ++j) {
      res += (a / i) * (b / j) * g[i * j * d];
    }
  }
  return res;
}
int main() {
  init();
  int a, b, c;
  while (~scanf("%d%d%d", &a, &b, &c)) {
    getg(a, b, c);
    int ab = min(a, b);
    long long res = 0;
    for (int i = 1; i <= ab; i = nt[i]) {
      res += mu[i] * getf(a / i, b / i, i * i);
    }
    printf("%d\n", int(res % (1 << 30)));
  }
  return 0;
}

```