#include <bits/stdc++.h>

using namespace std;

struct edge{
	int u,v,w;
};

long long ans=0;
int par[200005],ed[200005]={},sz[200005];

int root(int u){
	if(par[u]!=u){
		return par[u]=root(par[u]);
	}
	return u;
}

void merge(int u, int v, int w){
	int ru=root(u),rv=root(v);
	if(ru==rv){
		if(sz[ru]>ed[ru]){
			ed[ru]++;
			ans+=w;
		}
	}
	else{
		if(sz[ru]+sz[rv]>ed[ru]+ed[rv]){
			if(sz[ru]>sz[rv]){
				par[rv]=ru;
				sz[ru]+=sz[rv];
				ed[ru]+=ed[rv]+1;
			}
			else{
				par[ru]=rv;
				sz[rv]+=sz[ru];
				ed[rv]+=ed[ru]+1;
			}
			ans+=w;
		}
	}
}

int main(){
	int p,h,w; cin >> p >> h >> w;
	for(int i=0;i<h+w;i++){
		par[i]=i;
		sz[i]=1;
	}
	vector <edge> e(p);
	for(int i=0;i<p;i++){
		cin >> e[i].u >> e[i].v >> e[i].w;
		e[i].u--;e[i].v--;
	}
	sort(e.begin(),e.end(),[](edge &a, edge &b){
		return a.w>b.w;
	});
	for(int i=0;i<p;i++){
		merge(e[i].u,h+e[i].v,e[i].w);
	}
	cout << ans << endl;
	return 0;
}