#include <bits/stdc++.h>
using namespace std;
template <int S>
struct FenwickTree {
  int y[S];
  void add(int i, int d) {
    for (; i < S; i += i & (-i)) y[i] += d;
  }
  int sum(int i) {
    int ans = 0;
    for (; i; i -= i & (-i)) ans += y[i];
    return ans;
  }
  int find(int s) {
    int i, del = 1;
    for (i = S / 2; i; i /= 2) del *= 2;
    for (i = 0; del; del /= 2)
      if (i + del < S && y[i + del] < s) i += del, s -= y[i];
    return i;
  }
};
FenwickTree<10005> cnt, tot;
vector<int> cost[100005], ord[100005];
int n, ans = 1234567890, s, t;
int main() {
  scanf("%d", &n);
  s = n;
  for (auto i = (0); i < n; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    if (b) cost[a].push_back(b), t += b;
  }
  for (auto i = (0); i < 100005; i++) {
    sort(begin(cost[i]), end(cost[i]), greater<int>());
    for (auto j = (0); j < cost[i].size(); j++) ord[j].push_back(cost[i][j]);
  }
  for (auto v = (0); v < n; v++) {
    int d = v + 1 - s, u = 0;
    if (d > 0) {
      int i = cnt.find(d);
      u = tot.sum(i) + (d - cnt.sum(i)) * (i + 1);
    }
    ans = min(ans, t + u);
    for (auto x : ord[v]) s--, t -= x, cnt.add(x, 1), tot.add(x, x);
  }
  printf("%d", ans);
  return 0;
}
