#include <bits/stdc++.h>
using namespace std;
using ll = long long;

struct P {
    bool operator<(const P &p) const {
        return v > p.v;
    }
    int v, k;
};

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    int n;
    cin >> n;

    vector<array<int, 2>> v(n), u(n);
    for (int i = n; --i >= 0;) {
        cin >> v[i][0];
    }
    for (int i = 0; i < n; i++) {
        cin >> v[i][1];
    }

    vector<P> p(n * 2);
    for (int i = 0; i < n; i++) {
        for (int h = 0; h < 2; h++) {
            p[i * 2 + h] = { v[i][h], i * 2 + h };
        }
    }
    sort(p.begin(), p.end());

    for (int j = 0; j < n; j++) {
        int k = p[j].k;
        int i = k / 2, h = k % 2;
        u[i][h] = 1;
    }

    priority_queue<int, vector<int>, greater<>> pq;
    for (int i = 0; i < n; i++) {
        pq.push(v[i][0]);
        pq.push(v[i][1]);

        while ((int)pq.size() > i + 1) {
            pq.pop();
        }
        
        //u[i][v[i][0] > v[i][1]] = 0;
        //x--;
        //while (1) {
        //    int k = p[j++].k;
        //    int i1 = k / 2, h1 = k % 2;
        //    if (i1 > i && u[i1][h1] == 0) {
        //        u[i1][h1] = 1;
        //        break;
        //    }
        //}
    }

    ll r = 0;
    while (!pq.empty()) {
        r += pq.top();
        pq.pop();
    }
    //for (int i = 0; i < n; i++) {
    //    for (int h = 0; h < 2; h++) {
    //        r += u[i][h] * v[i][h];
    //    }
    //}

    cout << r << endl;

    //真ん中で分けて、片側だけを取ることはできる
    //というか、2列にN個並んでてN回好きな側を取れる
    //ただ、それよりもいい戦略は普通にあるので
    //高橋君がどこか選ぶと歯抜けになるよね 青木君が取るときは端から
    //点数差で考えるか？
    //底のを取り合うなら大きいほうを当然取る それよりいい手とは？
    //底のどちらかは取られてしまう 下のほうの半分は取られてしまう
    //選んだ場所がどこで切ってもそこから下の半分以下なら取れる？

    return 0;
}
#include <bits/stdc++.h>
using namespace std;

#define REP(i,n) for(int i=0;i<(n);i++)
#define ALL(v) v.begin(),v.end()

#define int long long

signed main(){
  int n;cin>>n;
  vector<int> v(n*2);
  REP(i,n*2)cin>>v[i];
  int sum=0;
  for(int p:v)sum+=p;
  priority_queue<int,vector<int>,greater<int>> que;
  REP(i,n){
    que.push(v[n-1-i]);
    que.push(v[n+i]);
    sum-=que.top();que.pop();
  }
  cout<<sum<<endl;
}
