#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define pa pair<int,int>
const int N=1100;
const int inf=2147483647;
LL read()
{
	LL x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9')x=x*10ll+ch-'0',ch=getchar();
	return x*f;
}
int n,st,ed;LL w[N];
map<pa,int>mp;
struct Edge
{
	int y,next;LL d;
}e[N<<4];
int len=1,last[N<<1];
void ins(int x,int y,LL d)
{
	int t=++len;
	e[t].y=y;e[t].d=d;e[t].next=last[x];last[x]=t;
}
void addedge(int x,int y,LL d){ins(x,y,d),ins(y,x,0);}
int h[N<<1];
bool bfs()
{
    memset(h,0,sizeof(h));h[st]=1;
    queue<int>q;q.push(st);
    while(!q.empty())
    {
        int x=q.front();q.pop();
        for(int i=last[x];i;i=e[i].next)
        {
            int y=e[i].y;
            if(e[i].d&&!h[y])h[y]=h[x]+1,q.push(y);
        }
    }
    return h[ed];
}
LL dfs(int x,LL f)
{
    if(x==ed)return f;
    LL s=0,t;
    for(int i=last[x];i;i=e[i].next)
    {
        int y=e[i].y;
        if(e[i].d>0&&h[y]==h[x]+1&&s<f)
        {
            t=dfs(y,min(e[i].d,f-s));
            s+=t;e[i^1].d+=t;e[i].d-=t;
        }
    }
    if(!s)h[x]=0;
    return s;
}
int type(int x,int y)
{
	x=(x&1),y=(y&1);
	if(!x&&!y)return 2;
	if(x&&!y)return 3;
	if(!x&&y)return 1;
	return 0;
}
int main()
{
	n=read();st=(n<<1)+1,ed=st+1;LL ans=0;
	for(int i=1;i<=n;i++)
	{
		int x=read(),y=read();w[i]=read();ans+=w[i];
		mp[make_pair(x,y)]=i;
	}
	for(map<pa,int>::iterator i=mp.begin();i!=mp.end();i++)
	{
		int x=i->first.first,y=i->first.second,o=i->second;
		addedge((o<<1)-1,o<<1,w[o]);
		if(type(x,y)==0)
		{
			addedge(st,(o<<1)-1,inf);
			if(mp[make_pair(x-1,y)])addedge(o<<1,(mp[make_pair(x-1,y)]<<1)-1,inf);
			if(mp[make_pair(x+1,y)])addedge(o<<1,(mp[make_pair(x+1,y)]<<1)-1,inf);
		}
		if(type(x,y)==1)
		{
			if(mp[make_pair(x,y-1)])addedge(o<<1,(mp[make_pair(x,y-1)]<<1)-1,inf);
			if(mp[make_pair(x,y+1)])addedge(o<<1,(mp[make_pair(x,y+1)]<<1)-1,inf);
		}
		if(type(x,y)==2)
		{
			if(mp[make_pair(x-1,y)])addedge(o<<1,(mp[make_pair(x-1,y)]<<1)-1,inf);
			if(mp[make_pair(x+1,y)])addedge(o<<1,(mp[make_pair(x+1,y)]<<1)-1,inf);
		}
		if(type(x,y)==3)addedge(o<<1,ed,inf);
	}
	while(bfs())ans-=dfs(st,inf);
	cout<<ans;
}