#include <bits/stdc++.h>
using namespace std;
struct node {
  long long n;
  long long t;
} a[2000000];
bool operator<(node x, node y) {
  if (x.n < y.n) return true;
  if (x.n == y.n && x.t < y.t) return true;
  return false;
}
struct nod {
  long long n;
  long long t;
};
bool operator<(nod a, nod b) { return a.t < b.t; }
priority_queue<long long> q;
int main() {
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> a[i].n;
  }
  for (int i = 1; i <= n; i++) {
    cin >> a[i].t;
  }
  sort(a + 1, a + 1 + n);
  int xx = 0;
  long long ans = 0;
  long long jz = 0;
  long long sum = 0;
  for (int i = 1; i <= n; i++) {
    int tag = i;
    while (a[i].n == a[i + 1].n && i + 1 <= n) {
      i++;
    }
    for (int j = tag; j <= i; j++) {
      q.push(a[j].t);
      sum += a[j].t;
    }
    long long x = q.top();
    sum -= x;
    q.pop();
    jz = a[i].n + 1;
    while (!q.empty() && i + 1 <= n && jz < a[i + 1].n) {
      long long x = q.top();
      q.pop();
      ans += x * (jz - a[i].n);
      sum -= x;
      jz++;
    }
    if (i != n) ans += sum * (a[i + 1].n - a[i].n);
  }
  jz = a[n].n;
  while (!q.empty()) {
    jz++;
    long long x = q.top();
    q.pop();
    ans += (jz - a[n].n) * x;
  }
  cout << ans << endl;
}
