#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

#pragma GCC optimize("O3,unroll-loops")
// #pragma GCC target("avx2")

#define int long long

#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define fi first
#define se second
#define rep(i,j,k) for (int (i) = (j); (i) < (k); ++i)
#define rrep(i,j,k) for (int (i) = (j); (i) >= (k); --i)
#define re return
#define pb push_back

using namespace std;
using namespace __gnu_pbds;

using ordered_set = tree<int, less<>, null_type, rb_tree_tag, tree_order_statistics_node_update>;
using ordered_multiset = tree<int, less_equal<>, null_type, rb_tree_tag, tree_order_statistics_node_update>;
using vi = vector<int>;
using vvi = vector<vi>;
using vvvi = vector<vvi>;
using pii = pair<int, int>;
using vpii = vector<pii>;
using vvpii = vector<vpii>;
using si = set<int>;
using msi = multiset<int>;

void amin(int& a, int b) {
    a = min(a, b);
}

void amax(int& a, int b) {
    a = max(a, b);
}

void solve();

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    int tt = 1;
    // cin >> tt;
    while (tt--) {
        solve();
    }
}

/* ------------------------------------- ACTUAL CODE STARTS HERE ------------------------------------- */

int bin_pow(int a, int b, int mod) {
    if (b == 0) re 1;
    if (b % 2 == 0) {
        int x = bin_pow(a, b / 2, mod);
        re (x * x) % mod;
    }
    re (a * bin_pow(a, b - 1, mod)) % mod;
}

const int MOD = 998244353, MAXN = 505, INF = 2e18;

vi gr[MAXN] {};
int good[MAXN] {};
int st[MAXN] {};

void solve() {
    int n; cin >> n;
    vpii vec(n); for (auto& [x, y] : vec) cin >> x >> y;
    int ans = 0, cur = 0;
    int cnt = 0;
    for (auto [x, y] : vec) {
        cur += x + cnt * y;
        amax(ans, cur);
        cnt++;
    }
    cout << ans << "\n";
}