#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef vector<int> vi;
typedef vector<char> vc;
typedef pair<int, int> pi;
const int mod = 1e9 + 7;
const double EPS = 1e-9;
const int INF = 1 << 29;
#define mp make_pair
#define el putchar('\n')
#define sp putchar(' ')
#define Fill(a,val) memset(a,val,sizeof a)
#define all(a) a.begin(),a.end()
#ifndef ONLINE_JUDGE
#define tr(a, it) for (decltype(a.begin()) it = a.begin(); it != a.end(); ++it)
#else
#define tr(a, it) for (typeof(a.begin()) it = a.begin(); it != a.end(); ++it)
#endif
#define in(n) scanf("%d",&n)
#define inl(n) scanf("%I64d",&n)
#define out(n) printf("%d",n);
#define outl(n) printf("%I64d",n);
int const NN = 1e6 + 6;
int f(int x, int m, int b){
double y = b*1.0 - x*1.0 / m*1.0;
return floor(y);
}
ll go(ll x, ll y){
return (x + 1ll) * (y + 1ll) * 1ll * (x + y) / 2ll;
}
int main(){
int m, b; cin >> m >> b;
ll ans = 0ll;
for (int x = 0; x <= m*b; ++x){
int y = f(x, m, b);
ans = max(ans, go(x, y));
}
cout << ans; el;
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgaW50IGxsOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHZlY3RvcjxjaGFyPiB2YzsKdHlwZWRlZiBwYWlyPGludCwgaW50PiBwaTsKY29uc3QgaW50IG1vZCA9IDFlOSArIDc7CmNvbnN0IGRvdWJsZSBFUFMgPSAxZS05Owpjb25zdCBpbnQgSU5GID0gMSA8PCAyOTsKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBlbCBwdXRjaGFyKCdcbicpCiNkZWZpbmUgc3AgcHV0Y2hhcignICcpCiNkZWZpbmUgRmlsbChhLHZhbCkgbWVtc2V0KGEsdmFsLHNpemVvZiBhKQojZGVmaW5lIGFsbChhKSBhLmJlZ2luKCksYS5lbmQoKQojaWZuZGVmIE9OTElORV9KVURHRQojZGVmaW5lIHRyKGEsIGl0KSBmb3IgKGRlY2x0eXBlKGEuYmVnaW4oKSkgaXQgPSBhLmJlZ2luKCk7IGl0ICE9IGEuZW5kKCk7ICsraXQpCiNlbHNlCiNkZWZpbmUgdHIoYSwgaXQpIGZvciAodHlwZW9mKGEuYmVnaW4oKSkgaXQgPSBhLmJlZ2luKCk7IGl0ICE9IGEuZW5kKCk7ICsraXQpCiNlbmRpZgojZGVmaW5lIGluKG4pIHNjYW5mKCIlZCIsJm4pCiNkZWZpbmUgaW5sKG4pIHNjYW5mKCIlSTY0ZCIsJm4pCiNkZWZpbmUgb3V0KG4pIHByaW50ZigiJWQiLG4pOwojZGVmaW5lIG91dGwobikgcHJpbnRmKCIlSTY0ZCIsbik7CgppbnQgY29uc3QgTk4gPSAxZTYgKyA2OwoKaW50IGYoaW50IHgsIGludCBtLCBpbnQgYil7Cglkb3VibGUgeSA9IGIqMS4wIC0geCoxLjAgLyBtKjEuMDsKCXJldHVybiBmbG9vcih5KTsKfQoKbGwgZ28obGwgeCwgbGwgeSl7CglyZXR1cm4gKHggKyAxbGwpICogKHkgKyAxbGwpICogMWxsICogKHggKyB5KSAvIDJsbDsKfQoKaW50IG1haW4oKXsKCWludCBtLCBiOyBjaW4gPj4gbSA+PiBiOwoJbGwgYW5zID0gMGxsOwoJZm9yIChpbnQgeCA9IDA7IHggPD0gbSpiOyArK3gpewoJCWludCB5ID0gZih4LCBtLCBiKTsKCQlhbnMgPSBtYXgoYW5zLCBnbyh4LCB5KSk7Cgl9Cgljb3V0IDw8IGFuczsgZWw7CglyZXR1cm4gMDsKfQ==