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 JAVA):

Solution:
import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args)  {
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt(), y = sc.nextInt(), z = sc.nextInt(), p[] = new int[(x * y * z) + 1];
        long ans = 0;
        find();
        for (int i = 1; i <= (x * y * z); i++) {
            LinkedHashMap<Integer, Integer> vec = ret(i);
            int e = 1;
            for (Map.Entry<Integer, Integer> map : vec.entrySet()) {
                e *= (1 + map.getValue());
            }
            p[i] = e;
        }
        for (int i = 1; i <= x; i++) {
            for (int c = 1; c <= y; c++) {
                for (int d = 1; d <= z; d++) {
                    ans += p[i * c * d];
                }
            }
        }
        System.out.println(ans % 1073741824);
    }

    static int siz = 1000001, spf[] = new int[siz];

    static void find() {
        for (int i = 1; i < siz; i++)

            spf[i] = i;
        for (int i = 4; i < siz; i += 2)
            spf[i] = 2;
        for (int i = 3; i * i < siz; i++) {
            if (spf[i] == i) {
                for (int c = i * i; c < siz; c += i) {
                    if (spf[c] == c)
                        spf[c] = i;
                }
            }
        }
    }

    static LinkedHashMap<Integer, Integer> ret(int a) {
        LinkedHashMap<Integer, Integer> vec = new LinkedHashMap<>();
        while (a != 1) {
            if (vec.containsKey(spf[a]))
                vec.put(spf[a], vec.get(spf[a]) + 1);
            else
                vec.put(spf[a], 1);
            a /= spf[a];
        }
        return vec;
    }
}