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.util.*;

public class B {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int a = sc.nextInt();
		int b = sc.nextInt();
		int c = sc.nextInt();
		
		HashMap[] hm = new HashMap[101];
		
		for(int i=0; i<101; i++){
			hm[i] = new HashMap<Integer, Integer>();
		}
		
		for(int i=2; i<101; i++){
			int t = i;
			double limit = Math.sqrt(t) + 1;
			
			for(int j=2; j<limit; j++){
				int exp = 0;
				while(t%j == 0){
					t /= j;
					exp++;
				}
				
				if(exp != 0){
					hm[i].put(j, exp);
				}
			}
			
			if(t > 1){
				hm[i].put(t, 1);
			}
		}
		
		HashMap<Integer, Integer> memo = new HashMap<Integer, Integer>();
		
		long sum = 0;
		int mod = 1<<30;
		
		for(int i=1; i<=a; i++){
			for(int j=1; j<=b; j++){
				for(int k=1; k<=c; k++){
					if(memo.containsKey(i*j*k)){
						sum += memo.get(i*j*k);
						sum %= mod;
						continue;
					}
					
					HashMap<Integer, Integer> pf = new HashMap<Integer, Integer>();
					
					for(Object o : hm[i].keySet()){
						int l = Integer.valueOf(o.toString());
						
						pf.put(l, Integer.valueOf(hm[i].get(l).toString()));
					}
					
					for(Object o : hm[j].keySet()){
						int l = Integer.valueOf(o.toString());
						
						if(!pf.containsKey(l)){
							pf.put(l, Integer.valueOf(hm[j].get(l).toString()));
						}else{
							pf.put(l, Integer.valueOf(pf.get(l).toString()) + Integer.valueOf(hm[j].get(l).toString()));
						}
					}
					
					for(Object o : hm[k].keySet()){
						int l = Integer.valueOf(o.toString());
						
						if(!pf.containsKey(l)){
							pf.put(l, Integer.valueOf(hm[k].get(l).toString()));
						}else{
							pf.put(l, Integer.valueOf(pf.get(l).toString()) + Integer.valueOf(hm[k].get(l).toString()));
						}
					}
					
					long prod = 1;
					
					for(int l : pf.keySet()){
						prod *= pf.get(l) + 1;
						prod %= mod;
					}
					
					memo.put(i*j*k, (int) prod);
					sum += prod;
					sum %= mod;
				}
			}
		}
		
		System.out.println(sum);
	}
}