#include <bits/stdc++.h>

#define fr      first
#define sc      second
#define int     long long
#define no      cout << "NO\n"
#define yes     cout << "YES\n"
#define all(x)  x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define sum(x)  accumulate(x.begin(), x.end(), 0LL)

using namespace std;

long long max(long long a, long long b){
    if(a>b) return a;
    else return b;
}

long long min(long long a, long long b){
    if(a>b) return b;
    else return a;
}

long long fac(long long p, long long n){
    if(n<2) return p;
    else{
        fac(p*n, n-1);
    }
}

bool IsPrime(int n){
    if(n%2==0 and n!=2 or n==1) return false;
    int o=sqrt(n)+1;
    for(int i=3; i<o; i+=2){
        if(n%i==0) return false;
    }
    return true;
}


int res=0;

void rec(int n, int m){
    res+=(n*m);
    if(n>1){ rec(n/2, m); rec((n/2)+(n%2), m); }
    else if(m>1){ rec(m/2, n); rec(n, (m/2)+(m%2)); }
}

void Run_Solution(){
//    long double n=0, m=0, k=0, p=0, l=0, r=0, c=0;
//    string s="", t="";
//    bool f=1, o=0;
//    char w;

    int n, m, p, l, nn, mm, nnn, o=0;
    cin >> n >> m; l=n*m; p=n*m; nn=n; n++;
    while(n>2){
        p+=(n-1)*m;
        n--;
//        cout << p << '\n';
    }
    n=nn; m++;
    while(m>2){
        p+=(m-1)*n;
        m--;
//        cout << p << '\n';
    }
    cout << p << '\n';
}

/*

*/

main(){
//    fflush(stdout);
//    freopen("input.txt", "r", stdin);
//    freopen("output.txt", "w", stdout);
    ios_base:: sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int t=1;
//    cin >> t;

    while(t--) Run_Solution();
    return 0;
}
