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

/**
 * @author DOAN Minh Quy
 * @email mquy.doan@gmail.com
 */
public class E235 {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new E235().run();
    }
    HashMap<Long,Integer>[] save = null;
    final long MOD = 1073741824 ;
    int[] getPrimeListTo(int limit){
        boolean[] mark = new boolean[limit+1];
        int primeCount = 1;
        for(int i = 3 ; i <= limit ; i+=2){
            if ( !mark[i] ){
                ++primeCount;
                for(int j = i * i ; j <= limit ; j += i){
                    try{
                        mark[j] = true;
                    }catch(Exception e){
                        System.out.println(j);
                    }
                }
            }
        }
        int[] primeList = new int[primeCount];
        primeList[--primeCount] = 2;
        for(int i = 3 ; i <= limit ; i += 2 ){
            if ( !mark[i] ){
                primeList[--primeCount] = i;
            }
        }
        return primeList;
    }
    long hashCode(int a,int b,int c){
        if ( a > b ){
            return hashCode(b, a, c);
        }
        if ( b > c ){
            return hashCode(a, c, b);
        }
        return ((long)a * 2012 + (long)b) * 2012 + (long)c;
    }
    int solve(int[] primeList,int depth,int a,int b,int c){
        if ( depth < primeList.length ){
            int prime = primeList[depth];
            long hash = hashCode(a,b,c);
            if ( save[depth].containsKey(hash) ){
                return save[depth].get(hash);
            }
            long rep = 0;
            for(int i = 0, x = a ; x != 0 ; ++i, x /= prime){
                for(int j = 0 , y = b ; y != 0 ; ++j, y /= prime){
                    for(int k = 0, z = c ; z != 0 ; ++k, z /= prime){
                        long hold = ((long)solve(primeList,depth+1,x,y,z)*(long)(i+j+k+1))%MOD;
                        rep  = (rep + hold)%MOD;
                    }
                }
            }
            save[depth].put(hash, (int)rep);
            return (int)rep;
            
        }else{
            return 1;
        }
    }
    @SuppressWarnings("unchecked")
    void run() {
        InputScanner scanner = new InputScanner(System.in);
        PrintStream printer = new PrintStream(System.out);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();
        int[] primeList = getPrimeListTo(Math.max(a, Math.max(b,c)));
        save = new HashMap[primeList.length+10];
        for(int i = 0 ; i < primeList.length+10 ; ++i){
            save[i] = new HashMap<Long,Integer>();
        }
        int answer = solve(primeList,0,a,b,c);
        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();
            }
        }
    }
}