#include <bits/stdc++.h>
using namespace std;
int main() {
  int n;
  while (cin >> n, n) {
    vector<int> t(n), lap(n);
    vector<pair<int, int> > s(n);
    for (int i = 0; i < (int)(n); i++) {
      cin >> t[i] >> lap[i];
      s[i] = pair<int, int>(t[i], lap[i]);
    }
    sort((s).begin(), (s).end());
    queue<int> q1, q2;
    for (int i = 0; i < (int)(n); i++) q1.push(i);
    int ans = 0;
    while (q1.size() || q2.size()) {
      int nxt = 1000;
      if (q1.size()) nxt = min(nxt, t[q1.front()]);
      if (q2.size()) nxt = min(nxt, t[q2.front()]);
      ans += nxt;
      vector<int> goal1, goal2;
      for (int i = 0; i < (int)(q1.size()); i++) {
        t[q1.front()] -= nxt;
        if (i > 0 && t[q1.back()] > t[q1.front()]) t[q1.front()] = t[q1.back()];
        q1.push(q1.front());
        q1.pop();
      }
      while (q1.size()) {
        if (t[q1.front()]) break;
        goal1.push_back(q1.front());
        q1.pop();
      }
      for (int i = 0; i < (int)(q2.size()); i++) {
        t[q2.front()] -= nxt;
        if (i > 0 && t[q2.back()] > t[q2.front()]) t[q2.front()] = t[q2.back()];
        q2.push(q2.front());
        q2.pop();
      }
      while (q2.size()) {
        if (t[q2.front()]) break;
        goal2.push_back(q2.front());
        q2.pop();
      }
      sort((goal1).begin(), (goal1).end());
      sort((goal2).begin(), (goal2).end());
      for (int id : goal1) {
        q2.push(id);
        t[id] = s[id].first;
      }
      for (int id : goal2) {
        if (--lap[id]) {
          q1.push(id);
          t[id] = s[id].first;
        }
      }
    }
    cout << ans << endl;
  }
}
