#include <bits/stdc++.h>
long long tree[262144 * 2 + 1];
std::pair<long long, long long> input[200010];
std::vector<long long> X;
void update(int num, long long val) {
  num |= 262144;
  tree[num] = val;
  while (num >>= 1) tree[num] = std::min(tree[num << 1], tree[num << 1 | 1]);
}
long long query(int s, int e) {
  s |= 262144, e |= 262144;
  long long r = LLONG_MAX / 2;
  while (s <= e) {
    if (s % 2 == 1) r = std::min(r, tree[s]);
    if (e % 2 == 0) r = std::min(r, tree[e]);
    s = (s + 1) >> 1;
    e = (e - 1) >> 1;
  }
  return r;
}
int main(void) {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%I64d", &input[i].first);
  }
  for (int i = 1; i <= n; i++) {
    scanf("%I64d", &input[i].second);
  }
  std::sort(input + 1, input + 1 + n);
  long long number = input[1].first;
  for (int i = 1; i <= n; i++) {
    number = std::max(number, input[i].first);
    X.push_back(number);
    number++;
  }
  for (int i = 0; i < X.size(); i++) {
    update(i, i);
  }
  for (int i = 1; i <= n; i++) {
    input[i].first =
        std::lower_bound(X.begin(), X.end(), input[i].first) - X.begin();
  }
  std::sort(
      input + 1, input + 1 + n,
      [](std::pair<long long, long long> a, std::pair<long long, long long> b) {
        return a.second > b.second;
      });
  long long result = 0;
  for (int i = 1; i <= n; i++) {
    int index = query(input[i].first, X.size() - 1);
    result += (X[index] - X[input[i].first]) * input[i].second;
    update(index, LLONG_MAX / 2);
  }
  printf("%I64d\n", result);
}
