#include using namespace std; #define rep(i, a, b) for(int i = a; i < (b); ++i) #define trav(a, x) for(auto& a : x) #define all(x) x.begin(), x.end() #define sz(x) (int)(x).size() typedef long long ll; typedef pair pii; typedef pair pll; typedef vector vi; typedef vector vl; typedef long double ld; // O(n/k), special treatment with k = 1. ll n,m,k; ll ans = 0; ll f(ll x){ if(x > n/k || (n - x*k > m*(k-1)) || x < 0)return -1; ll result = x*n - k * (x*(x-1))/2; ll n2 = n - x*k; ll k2 = n2/m + 1; ll x2 = n2 - m*(n2/m); result += x2*n2 - k2 * (x2*(x2-1))/2; ll n3 = n2 - x2*k2; ll k3 = k2-1; ll x3 = m-x2; result += x3*n3 - k3 * (x3*(x3-1))/2; ans = max(result, ans); return result; } int main(){ cin >> n >> m >> k; if(k == 1){ cout << (n*n+n)/2 << "\n"; return 0; } ans = 0; for(ll x = 0; x <= n/k; x++){ ans = max(ans, f(x)); } cout << ans << "\n"; return 0; }