//Author RufatM
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
using namespace __gnu_pbds;
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
typedef vector<pii> vpii;
typedef vector<vector<int>> vvi;
typedef vector<ll> vll;
typedef vector<bool> vb;
typedef vector<string> vs;
typedef map<int,int> mpii;
typedef map<bool,int> mpbi;
#define fastio ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define endl '\n'
#define pb push_back
#define pf push_front
#define eb emplace_back
#define ff first
#define ss second
#define all(x) begin(x),end(x)
#define precise(x) cout << fixed << setprecision(x);
#define rall(x) rbegin(x),rend(x)
#define ordered_set tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>
const int MOD=998244353;
const int INF=1e9;
const ll LINF=1e18;
const int MAXN=2e5+5;
ll add(ll a,ll b){
return (a+b)%MOD;
}
ll sub(ll a,ll b){
return (a-b+MOD)%MOD;
}
ll mul(ll a,ll b){
return (a*b)%MOD;
}
ll binpow(ll a,ll b){
ll res=1;
while(b>0){
if(b&1){
res=mul(res,a);
}
a=mul(a,a);
b>>=1;
}
return res;
}
ll modinv(ll cnt){
return binpow(cnt,MOD-2);
}
void solve(){
ll n;
cin >> n;
vector<pll> a(n);
for(int i=0;i<n;i++){
cin >> a[i].ff >> a[i].ss;
}
sort(all(a));
vll pref(n+1,0);
for(int i=0;i<n;i++){
pref[i+1] = pref[i]+a[i].ss;
}
ll ans = -LINF,best = pref[0]-a[0].ff;
for(int j=0;j<n;j++){
ans = max(ans,(pref[j+1]-a[j].ff)-best);
if(j+1<n){
best = min(best,pref[j+1]-a[j+1].ff);
}
}
cout << ans << endl;
}
signed main(){
fastio;
int t=1;
//cin >> t;
while(t--){
solve();
}
}