#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define REP(i,n) for(int i=(0);i<(n);i++)
#define fi first
#define se second
#define pb push_back
#define mp make_pair
using namespace std;
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef long long ll;

inline int read(){
	char ch=getchar();int x=0,op=0;
	while(!isdigit(ch))op|=(ch=='-'),ch=getchar();
	while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
	return op?-x:x;
}

const int N=100005,M=N*15;
const ll inf=1e18;
namespace G{
	struct edge{
		int u,v,f,c;ll w;int id;
	}e[M];
	ll f[N],d[N];
	int n,m,s,t,flag;
	vi g[N];
	inline void init(int _n,int _s,int _t,int _flag=1){
		n=_n,m=0,s=_s,t=_t,flag=_flag;
		rep(i,1,n)f[i]=0;
	}
	inline void add(int u,int v,int c,ll w){
		g[u].pb(m),w*=flag;
		e[m++]=(edge){u,v,0,c,w,(int)g[v].size()};
		g[v].pb(m);
		e[m++]=(edge){v,u,0,0,-w,(int)g[u].size()-1};
	}
	struct node{
		int u;ll d;
		inline friend bool operator < (node a,node b){
			return a.d>b.d;
		}
	};
	priority_queue<node> Q;
	int dij(){
		rep(i,1,n)d[i]=inf;
		d[s]=0,Q.push((node){s,0});
		while(!Q.empty()){
			node t=Q.top();Q.pop();
			if(d[t.u]!=t.d)continue;
			int u=t.u;
			for(auto k:g[u]){
				int v=e[k].v;
				if(e[k].f<e[k].c&&d[u]+e[k].w+f[u]-f[v]<d[v]){
					d[v]=d[u]+e[k].w+f[u]-f[v];
					Q.push((node){v,d[v]});
				}
			}
		}
		return d[t]<inf;
	}
	int in[N],r[N];
	int dfs(int u,int a){
		if(u==t)return a;
		ll res=0;in[u]=1;
		for(int &p=r[u];p<g[u].size();p++){
			int k=g[u][p],v=e[k].v;
			if(e[k].f<e[k].c&&d[u]+e[k].w+f[u]-f[v]==d[v]&&!in[v]){
				int tmp=dfs(v,min(a,e[k].c-e[k].f));
				res+=tmp,a-=tmp;
				e[k].f+=tmp,
				e[g[e[k].v][e[k].id]].f-=tmp;
			}
			if(!a)break;
		}
		return in[u]=0,res;
	}
	void mcmf(ll &flow,ll &cost){
		while(dij()){
			rep(i,1,n)r[i]=0;
			ll owo=dfs(s,2e9);
			flow+=owo,cost+=owo*(d[t]+f[t]);
			rep(i,1,n)f[i]=min(f[i]+d[i],inf);
		}
	}
}

int n,x,y,c,p0,p1,p2,p3,s,t,bas;

int main(){
	scanf("%d",&n);
	G::init(n*2+6,s=1,t=2,-1);
	p0=3,p1=4,p2=5,p3=6,bas=6;
	rep(i,1,n){
		scanf("%d%d%d",&x,&y,&c);
		G::add(s,bas+i,c,0);
		G::add(bas+i,p0,c,+x+y);
		G::add(bas+i,p1,c,+x-y);
		G::add(bas+i,p2,c,-x+y);
		G::add(bas+i,p3,c,-x-y);
	}
	bas+=n;
	rep(i,1,n){
		scanf("%d%d%d",&x,&y,&c);
		G::add(bas+i,t,c,0);
		G::add(p3,bas+i,c,+x+y);
		G::add(p2,bas+i,c,+x-y);
		G::add(p1,bas+i,c,-x+y);
		G::add(p0,bas+i,c,-x-y);
	}
	ll flow=0,cost=0;
	G::mcmf(flow,cost);
	cout<<-cost<<endl;

	return 0;
}