Building a model out of InstancedMesh components

Hi, I try to build a warehouse model, now I focus on placing regals in the right position. I want 6 regals on x axis, 5 on z-axis and 4 on y-axis. I use for loop to add InstancedMesh regals. Unfortunately it doesn’t work properly, my warehouse looks like this:

Most of regals are missing. I think it has something to do with how matrix is updated (dummy.matrixUpdate())

My code below. What’s wrong with for loop?
I attached my .glb model here.

        // DRACOLoader
        const dracoLoader = new DRACOLoader();
        dracoLoader.setDecoderPath('dracoDecoder/');

        // GLTFLoader
        const modelLoader = new GLTFLoader();
        modelLoader.setDRACOLoader(dracoLoader);


        let dummy = new THREE.Object3D();

        modelLoader.load(
            "regalFrontBottomNoMaterials.glb", (gltf) => {

              const regal = gltf.scene.getObjectByName('regalMesh');
              const meshes = [];

              regal.traverse(function (mesh, index) {
                if (mesh.geometry != undefined && mesh.geometry != null) {
                  meshes.push(mesh);
                }
              });

              if (regal.name.includes('regalMesh') || (regal.userData.InstancedObjects != undefined && regal.userData.InstancedObjects != null)) {
                
                var materials = [];
                var geometries = [];
                var mergedGeometry = new THREE.BufferGeometry();
                var meshMaterial;
                var mergedMesh;

                meshes.forEach(function (mesh, index) {
                  mesh.updateMatrix();

                  var geo = mesh.geometry.clone().applyMatrix4(mesh.matrix);
                  geometries.push(geo);

                  meshMaterial = mesh.material.clone();
                  materials.push(meshMaterial);               

                });

                try {
                  mergedGeometry = mergeBufferGeometries(geometries, true);
                  mergedGeometry.groupsNeedUpdate = true;
                  
                } catch (e) {
                  console.log(regal.name)
                }

                mergedMesh = new THREE.Mesh(mergedGeometry, materials);
                  mergedMesh.geometry.center()

                  var instanceMesh1 = new THREE.InstancedMesh(mergedMesh.geometry, mergedMesh.material, 6)
                  var instanceMesh2 = new THREE.InstancedMesh(mergedMesh.geometry, mergedMesh.material, 5)
                  var instanceMesh3 = new THREE.InstancedMesh(mergedMesh.geometry, mergedMesh.material, 4)

                // add meshes through for...loop
                for (let i = 0; i < 6; i++) {
                  for (let k = 1; k <= 5; k++) {
                    for (let j = 1; j <= 4; j++) {
                      dummy.position.set(1, i*2, 1);
                      dummy.updateMatrix();
                      instanceMesh3.setMatrixAt(j, dummy.matrix);  
                    }                   
                    dummy.position.set(1, 1, i*3);
                    dummy.updateMatrix();
                    instanceMesh2.setMatrixAt(k, dummy.matrix);
                  }
                  dummy.position.set(i*3, 1, 1);
                  dummy.updateMatrix();
                  instanceMesh1.setMatrixAt(i, dummy.matrix);
                }

                  scene.add(instanceMesh1)
                  scene.add(instanceMesh2)
                  scene.add(instanceMesh3)

              }            
              console.log(mergedMesh)

            },
            function (xhr) {
            console.log((xhr.loaded / xhr.total) * 100 + "% loaded");
            
            },
            function (error) {
            console.log(error);
            }
        );       
    },

regalFrontBottomNoMaterials.glb (327.3 KB)