#include <iostream>
#define MAXN 10001
using namespace std;

int JUMP[MAXN];

int cmp(const void *a, const void *b) 
{
    
return ((int *)b)[0- ((int *)a)[0];
}

int find(int x)     /* 查找包含接点x的集合的根节点 */
{
    
int i = x, t;

    
while (JUMP[i] != i)
        i 
= JUMP[i];      /* 最终求出i为树根 */
    
while (x != i)      /* 压缩路径以提高以后检索效率 */
    {
        t 
= JUMP[x];
        JUMP[x] 
= i;
        x 
= t;
    }
    
return i;      /* 返回根结点 */
}

int main()
{
    
int n, i, ans, day, max;
    
int p[MAXN][2];
    
bool mk[MAXN];
    
    
while (scanf("%d"&n) != EOF)
    {
        ans 
= 0;
        max 
= 0;
        memset(mk, 
0sizeof(mk));
        
for (i = 0; i < n; i++)
        {
            scanf(
"%d %d"&p[i][0], &p[i][1]);
            
if (p[i][1> max)
                max 
= p[i][1];
        }
        
for (i = 1; i <= max; i++)
            JUMP[i] 
= i;
        qsort(p, n, 
sizeof(int* 2, cmp);
        
for (i = 0; i < n; i++)
        {
            day 
= p[i][1];
            
if (mk[day])
                day 
= find(day); 
            
if (day > 0)
            {
                ans 
+= p[i][0];
                mk[day] 
= true;
                JUMP[day] 
= day - 1;
            }
        }
        printf(
"%d\n", ans);
    }
    
return 0;
}