#include<bits/stdc++.h>
#define pb push_back

using namespace std;
typedef vector<int> VI;

const int N=2005;

int gcd(int x,int y){return y?gcd(y,x%y):x;}

int n,a[N];
VI E[N],R[N];
bool vis[N];

VI merge(const VI&x,const VI&y){
	VI z;
	z.resize(x.size()+y.size());
	for(int i=0,j=0,k=0,li=x.size(),lj=y.size();i<li||j<lj;){
		if(i==li)z[k++]=y[j++];
		else if(j==lj)z[k++]=x[i++];
		else if(x[i]<y[j])z[k++]=y[j++];
		else z[k++]=x[i++];
	}
	return z;
}

void dfs(int x){
	vis[x]=true;
	for(int v:E[x])if(!vis[v])dfs(v),R[x]=merge(R[x],R[v]);
	R[x].insert(R[x].begin(),1,a[x]);
}

int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	sort(a+1,a+n+1);
	for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)
		if(gcd(a[i],a[j])>1)E[i].pb(j),E[j].pb(i);
	++n;
	for(int i=1;i<n;i++)E[i].pb(n),E[n].pb(i);
	dfs(n);
	for(int v:R[n])if(v)printf("%d ",v);
	return 0;
}