You only need one UV/VertexColor/Tangent/Normal per vertex btw…
You’re creating 8 vertices for each cube. 16x16x256x8 = over half a million vertices, 750k+ triangles worth of data you’re shunting on the GPU, it’s going to take a while.
You can start by culling the faces you don’t need to draw…i.e. below ground or with adjacent cubes. Then look at breaking up the world into chunks. I haven’t built a voxel world through so I’m not sure what the best approach is. It’s quite possible that you’re better off creating instanced cubes (InstancedStaticMesh/HierarchicalInstancedStaticMesh).
FWIW I have build a heightmap based terrain generator and it’s tough to maintain a good framerate just updating 32x32 patches. IME updating a proc mesh component in realtime for a 3d world is going to require a fair bit of smart optimising how to chunk up the world.