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.*;
import java.lang.*;
import java.util.concurrent.*;
public class Test2 
{
    static class pair implements Cloneable{
     int f; int s;   
     protected pair(int f,int s){
      this.f=f;this.s=s;   
     }
     
    }
    static class thr implements Runnable{
        
        thr(){
        }
        public void run(){
            for (int i= 0;i<5;i++)
                System.out.println("Good");
        }      
    }
    
static boolean prime[]= new boolean[1000001];
static ArrayList<Integer> nprime= new ArrayList<Integer>();
static long ans[]= new long[1000001];
public static void seive(){
    for(int i= 0;i<prime.length;i++)
        prime[i]=true;
    
    for(int i=2;i*i<prime.length;i++){
        if(prime[i])
            for(int j=i*2;j<prime.length;j+=i)
                prime[j]=false;
    }  
}
static long findn(int n){
    HashMap<Integer,Integer>m = new HashMap<Integer,Integer>();
    int x=n;
   
    if(ans[x]!=0)
        return ans[x];
    
    while(!prime[n]){
      for(int i=0;i<nprime.size();i++)  
          if(n%nprime.get(i)==0){
              n/=nprime.get(i);
             // System.out.println(n+" n2 "+prime[n]);
              if(m.get(nprime.get(i))==null)
                  m.put(nprime.get(i), 1);
              else
                  m.put(nprime.get(i), m.get(nprime.get(i))+1);
              
               break;
          }
          if(prime[n]){
              if(m.get(n)!=null)
               m.put(n, m.get(n)+1);
              else
                m.put(n, 1);}
    }
     long sum=1;
     
     for(Map.Entry<Integer,Integer> e:m.entrySet())
         sum*=(e.getValue()+1);
     ans[x]=sum;
     //System.out.println(sum+" "+x);
    return sum;
    
}
public static void main(String[] args)throws Exception {
    reader in = new reader(System.in);
    int n =in.nextInt();
    int x=in.nextInt();
    int y= in.nextInt();
    long sum = 0 ;
   seive();
    
   for(int i=2 ;i<prime.length;i++)
       if(prime[i])
           nprime.add(i);
   
    int c=0;
 
    for(int i= 1;i<=n;i++)
        for(int j=1;j<=x;j++)
            for(int k=1;k<=y;k++){
                c=i*j*k;
                //System.out.println(c+" v");
                if(c==1)
                    sum+=1;
                else if(prime[c])
                     sum+=2;
                else{
                    long a=findn(c);
                   
                    sum+=a;}
                }
    
    System.out.println(sum%(long)(Math.pow(2, 30)));
        
}
  static class reader{ 
      BufferedReader in ; 
      StringTokenizer tok;
      public reader(InputStream stream){
          in = new BufferedReader(new InputStreamReader(stream));
          tok=null;
          
      }
       String next()throws Exception{
           
         while(tok==null||!tok.hasMoreElements()){
             tok=new StringTokenizer(in.readLine());
  }
           return tok.nextToken();
           
       }
       
       int nextInt()throws Exception{
         return Integer.parseInt(next());
}
       long nextLong() throws Exception{
           return Long.parseLong(next());
       }
 }  

}