/*贪心的题目 用并查集优化 取d左边最近的一点为根节点*/
#include<cstdio>
#include<cstring>
#include<cstdlib>
struct S
{
int p,d;
} a[10010];
int p[10010];
int find(int x)
{
return x==p[x]?x:p[x]=find(p[x]);
}
int cmp(const void *a,const void *b)
{
struct S *p = (struct S *)a;
struct S *q = (struct S *)b;
return q->p-p->p;
}
int main()
{
int n;
while(scanf("%d",&n)==1)
{
for(int i = 0; i <= 10000; i++)
p[i] = i;
for(int i = 0; i < n; i++)
scanf("%d%d",&a[i].p,&a[i].d);
qsort(a,n,sizeof(a[0]),cmp);
int ans=0;
for(int i = 0; i < n; i++)
{
int px = find(a[i].d);
if(px>0)
{
p[px] = px-1;
ans+=a[i].p;
}
}
printf("%d\n",ans);
}
return 0;
}