#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T INT_LEN(T v) {
  int len = 1;
  while (v /= 10) ++len;
  return len;
}
template <class T>
inline T xmlt(T X0, T Y0, T X1, T Y1, T X2, T Y2) {
  return (X1 - X0) * (Y2 - Y0) - (X2 - X0) * (Y1 - Y0);
}
typedef struct {
  int a, b;
} re;
re ar[1005], br[1005];
bool vis[1005];
int N;
bool cmp(re va, re vb) { return va.b ^ vb.b ? va.b > vb.b : va.a > vb.a; }
bool cmp2(re va, re vb) { return va.a > vb.a; }
void input(int n) {
  int i;
  for (i = 0; i < n; i++) {
    scanf("%d%d", &ar[i].a, &ar[i].b);
  }
  sort(ar, ar + n, cmp);
}
void solve(int n) {
  int sum = 0, count = 1;
  int i;
  memset(vis, 0, sizeof(vis));
  for (i = 0; i < n; i++) {
    if (ar[i].b == 0) break;
    sum += ar[i].a;
    count += ar[i].b - 1;
    vis[i] = true;
  }
  int k = 0;
  for (i = 0; i < n; i++) {
    if (!vis[i]) br[k++] = ar[i];
  }
  sort(br, br + k, cmp2);
  for (i = 0; i < k; i++) {
    if (count == 0) break;
    sum += br[i].a;
    count--;
  }
  printf("%d\n", sum);
}
int main(void) {
  while (~scanf("%d", &N)) {
    input(N);
    solve(N);
  }
  return 0;
}
