/*
    题意:原题可转化为求在n*m范围内
            n m
             ∑∑  2*(gcd(x,y)-1)+1
           x=1 y=1

    感觉挺像visible trees的用容斥做,但不会容斥做

    看了
    
http://hi.baidu.com/570193465/blog/item/d4219303d7b43e1c738b6547.html
    O(nsqrt(n))
    
    对于上式,重点是求出 t=gcd(x,y) 时的(x,y)对数

    可以枚举gcd  
    记录cnt[i] = (n/i)*(m/i)  即公约数是i的倍数(k*i)的对数
    然后再调整cnt[i],使其表示公约数是i的对数
    cnt[i]-=cnt[k*i]即可!

*/

#include
<cstdio>
#include
<cstring>

inline 
int min(int a,int b){return a<b?a:b;}

const int MAXN = 100010;

long long cnt[MAXN];

int main()
{
    
int n,m;
    
while(~scanf("%d%d",&n,&m))
    
{
        
int t = min(n,m);
        
for(int i=2;i<=t;i++)//gcd = i
            cnt[i] = (long long)(n/i)*(m/i);//cnt[i] : the number of whose gcd is k*i

        
for(int i=t;i>=1;i--)
            
for(int k=2;k*i<=t;k++)
                cnt[i]
-=cnt[k*i];//to get the real number of whose gc is i
        long long ans = 0;
        
for(int i=1;i<=t;i++)
            ans
+=2*(i-1)*cnt[i];
        printf(
"%I64d\n",ans+(long long)n*m);
    }

    
return 0;
}