//22
#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>

using namespace std;

struct S{
  int t,v,r;
  bool operator<(S a)const{
    return v<a.v;
  }
};

int main(){
  for(int n;cin>>n,n;){
    vector<S> v;
    queue<S> que[2];
    for(int i=0;i<n;i++){
      S p;
      cin>>p.v>>p.r;
      p.r*=2;
      p.t=p.v;
      v.push_back(p);
    }
    sort(v.begin(),v.end());
    for(int i=0;i<v.size();i++){
      que[0].push(v[i]);
    }
    int t;
    while(!que[0].empty()||!que[1].empty()){
      int x=que[0].empty()||(!que[1].empty()&&que[0].front().t>que[1].front().t);
      t=que[x].front().t;
      vector<S> b;
      while(!que[x].empty()&&que[x].front().t<=t){
	S c=que[x].front();
	if(--c.r){
	  c.t=t+c.v;
	  b.push_back(c);
	}
	que[x].pop();
      }
      sort(b.begin(),b.end());
      for(int i=0;i<b.size();i++){
	que[!x].push(b[i]);
      }
    }
    cout<<t<<endl;
  }
  return 0;
}