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 ≤ 100).

Output

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

Examples

Input

2 2 2


Output

20


Input

5 6 7


Output

1520

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.
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ULL;
typedef unsigned long long uint64;
typedef long long LL;
typedef long long int64;
template <class T>
inline void checkmax(T &a, T b) {
  if (b > a) a = b;
}
template <class T>
inline void checkmin(T &a, T b) {
  if (b < a) a = b;
}
template <class T>
inline T MAX(T a, T b) {
  return (a > b) ? a : b;
}
template <class T>
inline T MIN(T a, T b) {
  return (a < b) ? a : b;
}
template <class T>
inline T sqr(T x) {
  return x * x;
}
template <class T>
inline T fABS(T a) {
  return a < 0 ? a * (-1) : a;
}
template <class T>
inline void SWAP(T &a, T &b) {
  T t = a;
  a = b;
  b = t;
}
inline LL POW(LL base, LL power) {
  LL I, res = base;
  if (power == 0) return 1;
  for (I = 0; I < power - 1; I++) res *= base;
  return res;
}
bool isUpperCase(char c) { return c >= 'A' && c <= 'Z'; }
bool isLowerCase(char c) { return c >= 'a' && c <= 'z'; }
bool isVowel(char c) {
  return (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' ||
          c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U');
}
bool isLetter(char c) { return c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z'; }
bool isDigit(char c) { return c >= '0' && c <= '9'; }
char toLowerCase(char c) { return (isUpperCase(c)) ? (c + 32) : c; }
char toUpperCase(char c) { return (isLowerCase(c)) ? (c - 32) : c; }
int toInt(string s) {
  int r = 0;
  istringstream sin(s);
  sin >> r;
  return r;
}
double toDouble(string s) {
  double r = 0;
  istringstream sin(s);
  sin >> r;
  return r;
}
string toString(int n) {
  string s;
  stringstream convert;
  convert << n;
  s = convert.str();
  return s;
}
const double PI = 2 * acos(0.0);
const double EPS = 1e-11;
const int SIZE = 1e6;
inline int findDiv(int n) {
  int I, K, p, NOD = 1, power;
  for (p = 2; p * p <= n; p++) {
    power = 0;
    if (n % p == 0) {
      while (n % p == 0) {
        power++;
        n /= p;
      }
      NOD = NOD * (power + 1);
    }
  }
  if (n > 1) NOD = NOD * (1 + 1);
  return NOD;
}
int main() {
  int tcases, caseno = 1, I, J, K, N, n, m, cnt = 0, len, a, b, c, multiply = 0,
              div = 0;
  scanf("%d%d%d", &a, &b, &c);
  for (I = 1; I <= a; I++) {
    for (J = 1; J <= b; J++) {
      multiply = 0;
      for (K = 1; K <= c; K++) {
        multiply = I * J * K;
        div += findDiv(multiply);
      }
    }
  }
  printf("%d\n", div % 1073741824);
  return 0;
}
