#include<bits/stdc++.h>
//#include<ext/pb_ds/assoc_container.hpp>
#pragma comment(linker, "/STACK:16000000")
//#define map gp_hash_table
#define PI 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
using namespace std;
//using namespace __gnu_pbds;
const int inf=0x3f3f3f3f;
const long long inf2=0x3f3f3f3f3f3f3f3f;
const double eps=1e-6;
const int mod=1000000007;
bool huzhi[2002][2002];
int n;
pair<int,int> a[2002];
int itr[2002];
vector<vector<int> > vec;
bool used[2002];
vector<int> cur;
void dfs(int x){
	used[x]=true;
	cur.push_back(a[x].first);
	for(int i=1;i<=n;i++){
		if(used[i] || huzhi[i][x])continue;
		dfs(i);
		return;
	}
}
bool ok(){
	for(int i=0;i<vec.size();i++)if(itr[i]!=vec[i].size())return false;
	return true;
}
int main(){
	vec.clear();
	ios::sync_with_stdio(0);
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i].first,a[i].second=i;
	sort(a+1,a+n+1);
	for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(__gcd(a[i].first,a[j].first)==1)huzhi[i][j]=true;
	for(int i=1;i<=n;i++)if(!used[i]){
		cur.clear();
		dfs(i);
		vec.push_back(cur);
	}
	vector<int> ans;
	while(!ok()){
		int mx=-1,pos=-1;
		for(int i=0;i<vec.size();i++)if(vec[i][itr[i]]>mx)mx=vec[i][itr[i]],pos=i;
		itr[pos]++;
		ans.push_back(mx);
	}
	for(int i=0;i<ans.size();i++)cout<<ans[i]<<" ";
	return 0;
}
