#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
struct node{int x,p;}a[maxn];
struct kkk{int h,t,que[maxn];}deq[maxn];
int n,dp[maxn][maxn];
bool cmp1(node a,node b){return a.x<b.x;}
bool cmp2(node a,node b){return a.x>b.x;}
int sb_dp(int cnm){
if(cnm==1) sort(a+1,a+1+n,cmp2);
else sort(a+1,a+1+n,cmp1);
memset(dp,0,sizeof(dp));
int Max=0;
for(int i=1;i<=n;i++){
dp[i][0]=a[i].p;
for(int j=1;j<i;j++){
while(deq[j].h>deq[j].t&&abs(a[i].x-a[j].x)<abs(a[j].x-a[deq[j].que[deq[j].t]].x)) deq[j].t++;
if(deq[j].h>deq[j].t) dp[i][j]=max(dp[i][j],dp[j][deq[j].t]);
else dp[i][j]=max(dp[i][j],dp[j][0]);
dp[i][j]+=a[i].p;
while(deq[i].h>deq[i].t&&dp[i][j]>dp[i][deq[i].h]) deq[i].h--;
deq[i].que[++deq[i].h]=j;
Max=max(Max,dp[i][j]);
}
}
return Max;
}
int main(){
ios::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
freopen("cnm.in","r",stdin);
freopen("cnm.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i].x>>a[i].p;
cout<<max(sb_dp(1),sb_dp(2));
return 0;
}