#include <bits/stdc++.h>
template <typename T>
bool chmax(T &m, const T q) {
  if (m < q) {
    m = q;
    return true;
  } else
    return false;
}
template <typename T>
bool chmin(T &m, const T q) {
  if (m > q) {
    m = q;
    return true;
  } else
    return false;
}
using namespace std;
const int INF = 0x3f3f3f3f;
const long long LNF = 0x3f3f3f3f3f3f;
inline int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
inline long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
inline int lcm(int a, int b) { return a * b / gcd(a, b); }
const int MAXN = 3001;
long long dp[MAXN][MAXN];
vector<pair<int, int>> DAT;
int n;
long long getAns(int pos, int last) {
  if (pos >= n) {
    return 0;
  }
  if (dp[pos][last] != -1) return dp[pos][last];
  long long x;
  x = getAns(pos + 1, pos) + DAT[pos].second;
  long long y;
  y = getAns(pos + 1, last) + DAT[pos].first - DAT[last].first;
  if (pos == 0) return dp[pos][last] = x;
  return dp[pos][last] = min(x, y);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  for (int i = int(0); i < int(MAXN); ++i)
    for (int j = int(0); j < int(MAXN); ++j) dp[i][j] = -1;
  cin >> n;
  for (int i = int(0); i < int(n); ++i) {
    int x, c;
    cin >> x >> c;
    DAT.push_back({x, c});
  }
  sort(DAT.begin(), DAT.end());
  long long temp = getAns(0, 0);
  cout << temp << '\n';
  return 0;
}
