The simplest way to do this is to invert the camera's view matrix which can then be used to represent the world space position and rotation of the camera. This result can be borrowed and altered slightly to become the weapon's world matrix.
Matrix cameraWorld = Matrix.Invert(view);
Matrix weaponWorld = cameraWorld; //gives your weapon a matrix that is co-located and co-rotated with camera
//then simply reposition the weapon matrix as necessary
weaponWorld.Translation += (cameraWorld.Forward * distInFrontOfCam) + //set to taste. moves the weapon slightly in front of cam
(cameraWorld.Down * amountWeaponIsLoweredFromCenterOfScreen) + //set to taste. moves the weapon from the center of the screen to the lower part
(cameraWorld.Right * leftOrRightOffset); //set to taste. moves the weapon left or right of center if desired.
Edit. I noticed you are also trying to apply scale to your weapon. My suggestion is to not do that in code. Rather right click the weapon model in the solution explorer and select properties. On the properties window, click the little arrowhead next to 'content processor' to expand the list. Find the scale property and set the scale there (to your 0.1f or whatever). Now you never need to waste cpu cycles to scale that model in code. This causes the scale to be set in the build phase when it converts the fbx to an xnb.