#include<bits/stdc++.h>
typedef long long ll;
ll gi(){
	ll x=0,f=1;
	char ch=getchar();
	while(!isdigit(ch))f^=ch=='-',ch=getchar();
	while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
	return f?x:-x;
}
#define all(x) (x).begin(),(x).end()
template<class T>void cxk(T&a,T b){a=a>b?a:b;}
template<class T>void cnk(T&a,T b){a=a<b?a:b;}
int a[100010],b[100010];
std::vector<ll>A,B;
int main(){
#ifdef LOCAL
	freopen("in.in","r",stdin);
	//freopen("out.out","w",stdout);
#endif
	int n=gi();
	ll sa=0;
	for(int i=1;i<=n;++i)sa+=a[i]=gi();
	for(int i=1;i<=n;++i)b[i]=gi()-a[i];
	A.resize(n/2+1),B.resize(n/2+1);
	for(int i=1,j=1;i<=n;i+=2,++j)A[j]=b[i],B[j]=b[i+1];
	std::sort(A.begin()+1,A.end(),std::greater<ll>());
	std::sort(B.begin()+1,B.end(),std::greater<ll>());
	for(int i=1;i<=n/2;++i)A[i]+=A[i-1],B[i]+=B[i-1];
	ll ans=0;for(int i=0;i<=n/2;++i)cxk(ans,A[i]+B[i]);
	printf("%lld\n",ans+sa);
	return 0;
}

#include <bits/stdc++.h>
// ifブロックはインデントがいる
#if __has_include(<atcoder/all>)
#include <atcoder/all>
using namespace atcoder;
#endif
#define repp(i, l, r) for (long long i = (l); i < (r); i++)
#define rep(i, n) for (long long i = 0; i < (n); ++i)
#define per(i, n) for (long long i = (n); i >= 0; --i)
#define all(v) v.begin(), v.end()
const int INF = 1 << 30;
const long long LINF = 1LL << 60;
const long long int MOD = 1000000007;
using namespace std;
using ll = long long;
using P = pair<long long, long long>;
template <class T>
inline bool chmin(T& a, T b) {
    if (a > b) {
        a = b;
        return true;
    }
    return false;
}
template <class T>
inline bool chmax(T& a, T b) {
    if (a < b) {
        a = b;
        return true;
    }
    return false;
}

using PP = pair<ll, P>;

int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};

vector<vector<ll> > g, dist;
vector<vector<vector<ll>>> predicted_cost;
vector<vector<P>> pre;
const ll h = 30, w = 30;

void dijkstra(int sx, int sy) {
    dist = vector<vector<ll> >(h, vector<ll>(w, INF));
    pre = vector<vector<P> >(h, vector<P>(w, P(-1, -1)));
    dist[sx][sy] = 0;
    priority_queue<PP, vector<PP>, greater<PP> > pq;
    pq.push(PP(0, P(sx, sy)));

    while (!pq.empty()) {
        PP p = pq.top();
        pq.pop();
        ll c = p.first;
        ll vx = p.second.first, vy = p.second.second;

        rep(i, 4) {
            ll nx, ny;
            nx = vx + dx[i], ny = vy + dy[i];
            if (nx < 0 || ny < 0 || nx >= h || ny >= w) continue;
            if (dist[nx][ny] <= g[nx][ny] + c) continue;
            dist[nx][ny] = g[nx][ny] + c;
            pre[nx][ny] = P(vx, vy);
            pq.push(PP(dist[nx][ny], P(nx, ny)));
        }
    }
}

vector<P> restore(ll tx, ll ty) {
    vector<P> path;
    ll x, y;
    for (; tx != -1 || ty != -1; tx = pre[x][y].first, ty = pre[x][y].second) {
        path.push_back(P(tx, ty));
        x = tx, y = ty;
    }
    reverse(path.begin(), path.end());

    return path;
}

char compare_pos(P s, P t) {
    if (s.first < t.first)
        return 'D';
    if (s.first > t.first)
        return 'U';
    if (s.second < t.second)
        return 'R';
    if (s.second > t.second)
        return 'L';
}

ll vector_average(vector<ll> &cost){
    ll sum = accumulate(all(cost),0LL);
    return sum / cost.size();
}

//ミョ(-ω- ?)
int main() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);

    g.resize(30);
    predicted_cost.resize(30);
    rep(i, 30) {
        g[i].resize(30);
        predicted_cost[i].resize(30);
        rep(j, 30) g[i][j] = 6000;
    }

    rep(q,1000){
        P s,t;
        cin >> s.first >> s.second >> t.first >> t.second;
        dijkstra(s.first, s.second);
        auto rstr = restore(t.first, t.second);
        rep(i, rstr.size() - 1) { cout << compare_pos(rstr[i], rstr[i + 1]); }
        cout << endl;
        ll len;
        cin >> len;
        if(rstr.size())len /= rstr.size();
        rep(i, rstr.size() - 1) {
            predicted_cost[rstr[i].first][rstr[i].second].push_back(len);
            if(q > 100)g[rstr[i].first][rstr[i].second] = vector_average(predicted_cost[rstr[i].first][rstr[i].second]);
        }
    }
    return 0;
}

/*グラフ情報とは別に、パス長からの平均を順次格納していった2+1次元の配列をやりながら、その平均値を取って暫定の頂点間距離にするといい感じに収束していくのでは
-> 84163614602

パス長から乱数パラメーターのV_ip,H_ipを求められれば道のコストの尤度が大きくなって幸せになる

クエリの点数計算式 round(2312311 * \sigma_{k=1}^1000 {0.998^{1000-k} * a_k / b_k})から、序盤より後半のak / bkが重視される
序盤でより正確な道のコストを求められれば点数の改善ができる
パスに関して、M=1のときはパスの評価値に平均を使えるけど、M=2のときはyj(ramdom)によって[0,yj),[yj,2]

*/