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.
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
/** Oct 21, 2012 **/
import java.util.InputMismatchException;

/**
 * @author DOAN Minh Quy
 * @email mquy.doan@gmail.com
 */
public class B {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new B().run();
	}
	void run() {
		InputScanner scanner = new InputScanner(System.in);
		PrintStream printer = new PrintStream(System.out);
		int[][] prime = new int[101][101];
		for(int i = 2 ; i <= 100 ; ++i){
			int k = i;
			for(int j = 2 ; j <= 100 && k != 1 ; ++j){
				while(k % j == 0){
					prime[i][j]++;
					k /= j;
				}
			}
			if ( k != 1){
				prime[i][k]++;
			}
		}
		int[] primeSet = new int[]{2,3,5,7,	11,13,17,19,23,	29,	31,37,41,43,47,53,59,61,67,71,73,79,83,	89,97};
		int a = scanner.nextInt();
		int b = scanner.nextInt();
		int c = scanner.nextInt();
		//printer.println(a+" "+b+" "+c);
		int answer = 0;
		for(int i = 1 ; i <= a ; ++i){
			for(int j = 1 ; j <= b ; ++j){
				for(int k = 1 ; k <= c ; ++k){
					int divisorCount = 1;
					for(int l = 0 ; l < primeSet.length ; ++l){
						//printer.println(i+" "+j+" "+k+" "+l);
						int add = prime[i][primeSet[l]] + prime[j][primeSet[l]] + prime[k][primeSet[l]];
						divisorCount = ( divisorCount * (add+1) ) % 1073741824 ;
					}
					answer = (answer + divisorCount) % 1073741824 ;
				}
			}
		}
		printer.println(answer);
	}
	class InputScanner{
		BufferedInputStream bis;
		byte[] buffer = new byte[1024]; 
		int currentChar;
		int charCount;
		public InputScanner(InputStream stream){
			bis = new BufferedInputStream(stream);
		}
		public byte read() {
			if (charCount == -1)
				throw new InputMismatchException();
			if (currentChar >= charCount) {
				currentChar = 0;
				try {
					charCount = bis.read(buffer);
				} catch (IOException e) {
					throw new InputMismatchException();
				}
				if (charCount <= 0)
					return -1;
			}
			return buffer[currentChar++];
		}
		public int nextInt(){
			int c = read();
			while (isSpaceChar(c)){
				c = read();
			}
			int sign = 1;
			if (c == '-') {
				sign = -1;
				c = read();
			}
			int rep = 0;
			do {
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				rep *= 10;
				rep += c - '0';
				c = read();
			} while (!isSpaceChar(c));
			return rep * sign;
		}
		public long nextLong(){
			int c = read();
			while (isSpaceChar(c)){
				c = read();
			}
			int sign = 1;
			if (c == '-') {
				sign = -1;
				c = read();
			}
			long rep = 0;
			do {
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				rep *= 10;
				rep += c - '0';
				c = read();
			} while (!isSpaceChar(c));
			return rep * (long)sign;
		}
		public String next(){
			char c = (char)read();
			while (isSpaceChar(c)){
				c = (char)read();
			}
			StringBuilder build = new StringBuilder();
			do{
				build.append(c);
				c = (char)read();
			}while(!isSpaceChar(c));
			return build.toString();
		}
		public boolean isSpaceChar(int c) {
			return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
		}
		public void close(){
			try {
				bis.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
