#include<stdio.h>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
pair<int,int>p[110];
int main(){
	int a;
	while(scanf("%d",&a),a){
		for(int i=0;i<a;i++){
			int x,y;scanf("%d%d",&x,&y);
			p[i]=make_pair(x,y);
		}
		std::sort(p,p+a);
		queue<pair<int,pair<int,int> > >Q[2];
		for(int i=0;i<a;i++){
			Q[0].push(make_pair(p[i].first,make_pair(p[i].first,p[i].second)));
//			printf("%d %d\n",p[i].first,p[i].second);
		}
		int t=0;
		while(Q[0].size()||Q[1].size()){
			int at=0;
			if(Q[1].size()&&(!Q[0].size()||Q[0].front().first>Q[1].front().first))at=1;
			int now=Q[at].front().first;
			int v=Q[at].front().second.first;
			int rem=Q[at].front().second.second;
		//	if(rem)printf("%d %d %d\n",now,v,rem);
			t=max(now,t);
			vector<pair<int,int> >next;
			while(Q[at].size()&&Q[at].front().first<=now){
				if(at==1&&Q[at].front().second.second==1){
					Q[at].pop();
					continue;
				}
				next.push_back(Q[at].front().second);
				Q[at].pop();
			}
			std::sort(next.begin(),next.end());
			for(int i=0;i<next.size();i++)Q[!at].push(make_pair(now+next[i].first,make_pair(next[i].first,next[i].second-at)));
		}
		printf("%d\n",t);
	}
}