#include //#include using namespace std; //using namespace atcoder; using ll = long long; //using mint = modint998244353; int main(){ cin.tie(nullptr); ios_base::sync_with_stdio(false); /* 後ろから見ていく。 1種類目: 後ろの攻撃回数*Aを足す。 2種類目: Bを足す。 dp(i, j) = 後ろから見ていってi番目までにj回攻撃している時の最大値 */ ll N; cin >> N; vector A(N), B(N); for (int i=0; i> A[i] >> B[i]; const ll inf = -1e18; vector dp(N+1, inf); dp[0] = 0; for (int i=N-1; i>=0; i--){ vector pd(N+1, inf); for (int j=0; j<=N; j++){ if (dp[j] != inf){ if (j+1<=N) pd[j+1] = max(pd[j+1], dp[j]+B[i]); pd[j] = max(pd[j], dp[j]+A[i]*j); } } swap(dp, pd); } ll ans=inf; for (int i=0; i<=N; i++) ans = max(ans, dp[i]); cout << ans << endl; return 0; }