Separation gap after subdivide
If you want individual smaller cubes it would be easier to generate them with an array rather than subdividing a large cube.  This is because when you subdivide, Blender doesn't generate internal faces.


Create a cube.   
Add an array modifier with a count of 3 and an X
relative offset of 1.1.   
Add a second array modifier with a count of 3 and a Y relative offset of 1.1.  
Add a third array modifier with a count of 3 and a Z relative offset of 1.1.


At this point you should have something that looks like a subdivided cube.



To convert to a single mesh object, select the object then press Alt+C to bring up the Convert To menu then select Mesh from Curve/Meta/Surf/Text.