#include using namespace std; typedef long long ll; int main(void) { ll n, m, k; scanf("%lld%lld%lld", &n, &m, &k); ll g = n/k, opt = 0; while (g >= 0 && g*k + (k-1)*m >= n) { ll sz = (n-g*k) / m, rem = (n-g*k) % m; // g groups of size k, (m-rem) groups of size sz, and rem groups of size sz+1 ll val = k*g*(g+1)/2; // g groups of size k causing k+2k+3k+...+gk damage for (int i = 0; i < m; ++i) { if (i < rem) val += (g+i+1)*(sz+1); // group of size sz+1 getting killed in round g+i+1 else val += (g+i+1)*sz; // group of size sz getting killed in round g+i+1 } opt = max(opt, val); --g; } printf("%lld\n", opt); }