#include<bits/stdc++.h>
using namespace std;
struct work {
int d,r;
bool operator>(const work& a) const {
return d > a.d;
}
};
int n;
work d[100010];
int p[100010];
priority_queue<work, vector<work>, greater<work> > q;
bool cmp(work a,work b) {
if(a.d< b.d)
return a.d< b.d;
else
return p[a.r] > p[b.r];
}
int main() {
cin >> n;
for(int i = 0; i < n; i++) {
cin >> d[i].d >> p[i];
d[i].r = i;
}
sort(d,d+n,cmp);
for(int i = 0; i < n; i++) {
int d1 = d[i].d;
int p1 = p[d[i].r];
if(q.size() >= d1) {
if(p[q.top().r] < p1) {
int tmp = p[q.top().r];
q.pop();
q.push({d1,d[i].r});
}
} else {
q.push({d1,d[i].r});
}
}
long long ans = 0;
while(!q.empty()) {
work tmp = q.top();
q.pop();
cout << p[tmp.r] <<endl;
ans += p[tmp.r];
}
cout << ans << endl;
return 0;
}