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.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Scanner;

public class TC
{
    static int[] primes = { 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 };
    static int len;
    static HashMap<Integer, Integer> index;
    static HashMap<Integer, Prime> fact;
    static HashMap<Integer, Integer> memo;
    static int MOD = 1073741824;
    static void init()
    {
        len = primes.length;
        index=  new HashMap();
        fact = new HashMap();
       
        for( int i=0; i<len; i++ )
        {
            index.put( primes[ i ] , i);
        }
                
        for( int i=1; i<=100; i++ )
        {
            factorize( i );
        }
        
        memo = new HashMap();
    }
    
    static long getCnt( int n, int a, int b, int c  )
    {
        if( memo.containsKey( n ))
            return memo.get( n );
        
        if( n==1 )
            return 1;
        
        Prime p1 = fact.get( a );
        Prime p2 = fact.get( b );
        Prime p3 = fact.get( c );
        
        int cnt = 1;
        HashSet<Integer> done = new HashSet();
        
        
        for( Object o : p1.f.keySet() )
        {
            int k = ( Integer ) o;
            
            if( done.contains( k ))
                continue;
            int temp = p1.f.get( k );
            
            if( p2.f.containsKey( k ))
                temp += p2.f.get( k );
            
            if( p3.f.containsKey( k ))
                temp += p3.f.get( k );
            
            done.add( k );
            
            cnt = cnt*( temp+1 );
            cnt = cnt%MOD;
            
        }
        
        for( Object o : p2.f.keySet() )
        {
            int k = ( Integer ) o;
            
            if( done.contains( k ))
                continue;
            int temp = p2.f.get( k );
            
                        
            if( p3.f.containsKey( k ))
                temp += p3.f.get( k );
            
            done.add( k );
            
            cnt = cnt*( temp+1 );
            cnt = cnt%MOD;
            
        }
        
        for( Object o : p3.f.keySet() )
        {
            int k = ( Integer ) o;
            
            if( done.contains( k ))
                continue;
            int temp = p3.f.get( k );
            
                        
            
            done.add( k );
            
            cnt = cnt*( temp+1 );
            cnt = cnt%MOD;
            
        }
        
        memo.put( n, cnt );
        return cnt;
    }
    static void solve( int a, int b, int c )
    {
        init();
        long cnt = 0;
        
        for( int i=1; i<=a; i++ )
        {
            for( int j=1; j<=b; j++ )
            {
                for( int k=1; k<=c; k++ )
                {
                    int N = i*j*k;
                    cnt = cnt + getCnt( N, i, j, k );
                    cnt = cnt % MOD;
                }
            }
        }
        
        System.out.println( cnt%MOD );
    }
    
    static void factorize( int n )
    {
        Prime p = new Prime();
        
        if( n==1 )
        {
            fact.put( 1, p );
            return;
        }
        
        if( index.containsKey( n ))
        {
            int in = index.get( n );
            p.f.put( n , 1 );
            fact.put( n, p );
            return;
        }
        
        int div = -1;
        for( int i=2; i<n; i++ )
        {
            if( n%i == 0 )
            {
                div = i;
                break;
            }
        }
        
        Prime p1 = fact.get( div );
        Prime p2 = fact.get( n/div );
        
        Prime res = new Prime( p1.f );
        
        for( Object o : p2.f.keySet())
        {
            int k = ( Integer ) o;
            
            if( !res.f.containsKey( k ))
            {
                res.f.put( k, p2.f.get( k ));
            }
            
            else
            {
                int c1 = res.f.get( k );
                int c2 = p2.f.get( k );
                res.f.put( k, c1 + c2 );
                
            }
        }
        
        fact.put( n, res );
        return;
    }
    
    public static void main( String[] args ) throws IOException
    {
        Scanner s = new Scanner( System.in );
        int A = s.nextInt();
        int B = s.nextInt();
        int C = s.nextInt();
        
        solve( A, B, C );
        
    }
    
    
    
}

class Prime
{
    HashMap<Integer, Integer> f;
    
    public Prime()
    {
        f = new HashMap();
       
    }
    
    public Prime( HashMap x )
    {
        f = new HashMap();
        f.putAll(x);
    }
    
    
           
}